Make sure icons update on theme change
authorMatthias Clasen <mclasen@redhat.com>
Tue, 5 Jan 2016 02:22:11 +0000 (21:22 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 Jan 2016 02:32:19 +0000 (21:32 -0500)
Gadgets don't connect to style-changed for widget nodes, and
GtkImage uses its widget node for the icon helper. The visible
effect of this is that symbolic icons don't change color when
switching to the dark variant of Adwaita.

Fix this by manually invalidating the icon helper.

gtk/gtkiconhelper.c
gtk/gtkiconhelperprivate.h
gtk/gtkimage.c

index 3671c5fc8c5e37ef07e01cf9cec335b59400a1ee..73f105f130b809ddcdb08c73bfeb59444e19a9a8 100644 (file)
@@ -48,7 +48,7 @@ struct _GtkIconHelperPrivate {
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkIconHelper, gtk_icon_helper, GTK_TYPE_CSS_GADGET)
 
-static void
+void
 gtk_icon_helper_invalidate (GtkIconHelper *self)
 {
   if (self->priv->rendered_surface != NULL)
index 291fb40e165332769883a3bdd42544acfd885f4f..f4bdcd4817035b055174f5d93f433115846bf68a 100644 (file)
@@ -138,6 +138,7 @@ gboolean _gtk_icon_helper_get_force_scale_pixbuf (GtkIconHelper *self);
 void     _gtk_icon_helper_set_force_scale_pixbuf (GtkIconHelper *self,
                                                   gboolean       force_scale);
 
+void      gtk_icon_helper_invalidate (GtkIconHelper *self);
 
 G_END_DECLS
 
index 82f7d7cae925d37854d8ffa936e5e4f82ca38f5b..703515b38c1dee16c3f904bcb74995ee70aa1600 100644 (file)
@@ -1915,6 +1915,16 @@ gtk_image_style_updated (GtkWidget *widget)
 {
   GtkImage *image = GTK_IMAGE (widget);
   GtkImagePrivate *priv = image->priv;
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (widget);
+  if (context)
+    {
+      GtkCssStyleChange *change = gtk_style_context_get_change (context);
+
+      if (change && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
+        gtk_icon_helper_invalidate (priv->icon_helper);
+    }
 
   GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget);